/*================================================================
*   Copyright (C) 2020 Sangfor Ltd. All rights reserved.
*   
*   文件名称：svr.cpp
*   创 建 者：Ann
*   创建日期：2020年06月21日
*   描    述：
*
================================================================*/

#include "tcp_svr.hpp"

#define CHECK_RET(p) if(p == false) {return -1;}

int main()
{
    TcpSvr listen_ts;
    //1.创建套接字
    CHECK_RET(listen_ts.CreateSocket());
    //2.绑定地址信息
    CHECK_RET(listen_ts.Bind("172.16.99.129", 19999));
    //3.监听
    CHECK_RET(listen_ts.Listen());

    TcpSvr newts;
    while(1)
    {
        //4.获取连接
        struct sockaddr_in cli_addrinfo;
        CHECK_RET(listen_ts.Accept(&newts, &cli_addrinfo));
        //accept函数调用， 如果没有新的连接，则会发生阻塞

        std::string buf;
        //如果recv函数是阻塞状态， 当接收缓冲区当中没有数据的时候，recv函数会阻塞
        newts.Recv(&buf);
        printf("cli tell me [%s]\n", buf.c_str());

        printf("Send to client: ");
        fflush(stdout);
        buf.clear();
        std::cin >> buf;

        newts.Send(buf);
    }
    newts.Close();
    listen_ts.Close();
    return 0;
}
